@* 形状标签助手将在标记中渲染一个形状。type 属性将是形状类型，主要从 cshtml 或 liquid 文件映射
    （还有其他创建形状类型的方法，但将在后面描述）。以下属性将是传递给形状的动态视图模型中的实际参数。*@

<shape type="TestShape" name="John Doe" age="26" />

@* 下一站：查看 Views/TestShape.cshtml 然后回到这里。*@

@* 注意，您只能向 <shape> 标签助手传递原始值。形状也可以在其参数中接受复杂对象，
    但为此您需要编写更复杂的代码：*@

@await DisplayAsync(await New.ComplexTestShape(Values: new[] { "one", "two", "three" }))

@* New 属性包含一个形状工厂，您可以像上面那样使用它来创建形状。然后您可以使用 DisplayAsync 来显示它，
    我们稍后也会大量使用它。*@

@* 下一站：查看 Views/ComplexTestShape.cshtml 然后回到这里。*@

@* 您还可以创建使用静态类型模型而不是动态模型的形状。这稍微复杂一些，您必须执行以下操作：*@

@* 这是为了能够在 IShapeFactory 上使用扩展方法所必需的。*@
@using OrchardCore.DisplayManagement

@* Factory 是一个 IShapeFactory 实例。顺便说一下，它也在 New 属性后面。*@
@await DisplayAsync(await Factory.CreateAsync<StaticallyTypedTestShapeViewModel>(
    "StaticallyTypedTestShape",
    cacheViewModel =>
    {
        cacheViewModel.SomeValue = 4;
        cacheViewModel.SomeOtherValue = 5;
    }))

@* 下一站：查看 Views/StaticallyTypedTestShape.cshtml 然后回到这里。*@

@* 如果可以从 ShapeViewModel 派生视图模型，您也可以做比前一个更简单的静态类型方法。
    查看 StaticallyTypedDerivedTestShapeViewModel 了解视图模型中需要做什么，然后看看下面如何使用它：*@

@await DisplayAsync(new StaticallyTypedDerivedTestShapeViewModel { SomeValue = 6, SomeOtherValue = 7 })

@* 下一站：查看 Views/StaticallyTypedDerivedTestShape.cshtml 并从那里继续。*@
